'''
推导式：是一种简洁高效的语法结构，用于快速生成集合、列表、字典
分类：列表推导式、字典推导式 集合推导式 生成器表达式
没有元组推导式，因为元组是不可变的
字符串也是不可变的
'''
'''
列表推导式:
格式：[表达式 for 变量 in 可迭代的对象 if 条件]
'''
# 生成1-10的平方列表
# 方法1
a = []
for i in range(1,11):
    a.append(i*i)

# 方法2
b = list(map(lambda x: x*x,range(1,11)))
print(b)

# 方法3
c = [i*i for i in range(1,11)]
print(c)

# 将1-20以内的偶数的平方，存储到列表中
d = [y*y  for y in range(1,21) if y%2==0]
print(d)

'''
集合推导式 {表达式 for 变量 in 可迭代的对象 if 条件}
'''
a = list("abc")
b = list("$%^")
c = list("123")
# 生成一个笛卡尔集
list1 = []
for aa in a:
   for bb in b:
       for cc in c:
          list1.append(aa+bb+cc)
print(list1)

a1 = list("aba")
b1 = list("$%^")
c1 = list("121")
list2 = [aa1+bb1+cc1 for aa1 in a1 for bb1 in b1 for cc1 in c1]
print(list2)

# 集合推导式
set1 = {aa1+bb1+cc1 for aa1 in a1 for bb1 in b1 for cc1 in c1}
print(set1)

'''
字典推导式：
{表达式1:表达式2 for 变量 in 可迭代的对象 if 条件}
{k:v for 变量 in 可迭代的对象 if 条件}
'''
scores = {"tom":67,"lily":46,"lucy":90,"张三":89}
# 将成绩及格的筛选出来
e ={}
for k,v in scores.items():
    if v>= 60:
        e[k] = v

f = {k:v for k,v in scores.items() if v>=60 }
print(f)

# 生成器 (表达式 for 变量 in 可迭代的对象 if 条件)
s = (x*x for x in range(1,11))
print(type(s)) # <class 'generator'>
print(s)
for n in s:
    print(n)





